import java.util.*;
//暴力枚举：对每个声部的人进行分组:找出最小符合要求的人数x
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class code2 {
    static int n, m;
    static Map<Integer, Integer> hash = new HashMap<>(); //统计每总声部的人数
    //判断最多人数为x时，是否可以分为m组
    public static boolean check(int x) {
        int g = 0;//统计当前分了多少组
        for(int a:hash.values()) {
            g += a/x + (a%x>0?1:0);
        }
        return g <= m;
    }
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        n = in.nextInt();
        m = in.nextInt();
        int hashmax = 0;//每个声部的最大人数
        //统计hash
        for (int i = 0; i < n; i++) {
            int x = in.nextInt();
            hash.put(x, hash.getOrDefault(x, 0) + 1);
            hashmax = Math.max(hashmax, hash.get(x));
        }
        //边界情况
        if (hash.size() > m) System.out.print(-1);
            //对每个声部的人进行分组:找出最小符合要求的人数x
        else {
//            for (int i = 1; i <hashmax; i++) {
//                if (check(i)) {
//                    System.out.print(i);
//                    break;
//                }
//            }
            int l=1,r=hashmax;
            while(l<r) {
                int mid = (l+r)/2;
                if(check(mid)) r = mid;
                else l = mid+1;
            }
            System.out.print(l);
        }

    }
}